package testUnitaires;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import junit.framework.TestCase;
import projetInfo1.Demande;
import projetInfo1.Fichier;
import projetInfo1.Groupe;
import projetInfo1.INoeud;
import projetInfo1.Noeud;
public class TestNoeud extends TestCase {

	private Noeud n1, n2, n3;

	@Override
	protected void setUp() throws Exception {
		super.setUp();
		n1 = new Noeud(null, null);
		n2 = new Noeud(null, null);
		n3 = new Noeud(null, null);
		
		//groupe noeud 1
		ArrayList<Noeud> n1g1 = new ArrayList<Noeud>();
		ArrayList<Noeud> n1g2 = new ArrayList<Noeud>();
		n1.ajouterGroupe("n1g1");
		n1.ajouterGroupe("n1g2");
		n1.getGroupe("n1g1").ajouterNoeud(n2);
		n1.getGroupe("n1g2").ajouterNoeud(n2);
		n1.getGroupe("n1g2").ajouterNoeud(n3);
		
		//groupe noeud 2
		ArrayList<Noeud> n2g1 = new ArrayList<Noeud>();
		ArrayList<Noeud> n2g2 = new ArrayList<Noeud>();
		n2g1.add(n1);
		n2g1.add(n3);
		n2g2.add(n3);
		n2.ajouterGroupe("n2g1");
		n2.ajouterGroupe("n2g2");
		n1.getGroupe("n2g1").ajouterNoeud(n1);
		n1.getGroupe("n2g1").ajouterNoeud(n3);
		n1.getGroupe("n2g2").ajouterNoeud(n3);
		
//		//Fichier du noeud 1
//		ArrayList<Fichier> liste1 = new ArrayList<Fichier>();
//		liste1.add(new Fichier("n1Fic1", "n1g1", new Date()));
//		liste1.add(new Fichier("n1Fic2", "n1g2", new Date()));
//		liste1.add(new Fichier("n1Fic3", "n1g2", new Date()));
//		liste1.add(new Fichier("n1Fic4", "n1g2", new Date()));
//		n1.setListeFichiers(liste1);
//		
//		//Fichier du noeud 2
//		ArrayList<Fichier> liste2 = new ArrayList<Fichier>();
//		liste1.add(new Fichier("n2Fic1", "n2g1", new Date()));
//		liste1.add(new Fichier("n2Fic2", "n2g1", new Date()));
//		liste1.add(new Fichier("n2Fic3", "n2g2", new Date()));
//		liste1.add(new Fichier("n2Fic4", "n2g1", new Date()));
//		n2.setListeFichiers(liste1);
	}

	@Override
	protected void tearDown() throws Exception {
		super.tearDown();
	}
	
	public void testAccepterDemande() {
		n2.demander(n1, Demande.EN_ATTENTE_DE_CONFIRMATION);
		n2.accepterDemande(n1);
		assertTrue(n1.getListeDemandes().size() == 0);
		assertTrue(n2.getListeDemandes().size() == 0);
	}
	
	public void testRefuserDemande() {
		n1.demander(n2, Demande.EN_ATTENTE_DE_CONFIRMATION);
		n1.refuserDemande(n2);
		assertTrue(n1.getListeDemandes().size() == 0);
		assertTrue(n2.getListeDemandes().size() == 0);
	}
	
	public void testDemander() {
		n1.demander(n2, Demande.EN_ATTENTE_DE_CONFIRMATION);
		assertTrue(n1.getListeDemandes().size() == 1);
		assertTrue(n1.getListeDemandes().get(0).getInoeud().equals(n2));
	}
	
	public void testAjouterNoeudListeConfiance(){
		n1.ajouterNoeudListeConfiance(n3, "n1g1");
		n1.ajouterNoeudListeConfiance(n3, "n1g2");
		n3.accepterDemande(n1);
		assertTrue(n1.getGroupe("n1g1").listeNoeuds().contains(n3));
		assertTrue(n1.getGroupe("n1g2").listeNoeuds().contains(n3));
	}
	
	public void testSupprimerNoeudListeConfiance(INoeud noeudSupp){
		n1.supprimerNoeudListeConfiance(n2);
		for(Groupe g : n1.getListeGroupes()) {
			assertFalse(g.listeNoeuds().contains(n2));
		}
	}
	
	public void testDupliquer(){
		ArrayList<File> listeFile = new ArrayList<File>();
		for(Fichier f : n1.listerMesFichiers()) {
			listeFile.add(new File(f.getChemin()));
		}
//		n2.dupliquer(n1, listeFile);
		for(Fichier f : n1.listerMesFichiers()){
			assertTrue(n2.listerFichiers(n1).contains(f.getNom()));
		}
	}

	public void testSupprimmerGroupe(){
		n1.supprimerGroupe("n1g2");
		for(Groupe g : n1.getListeGroupes()){
			assertFalse(g.getNom().equals("n1g2"));
		}
	}
	
	public void testMajListeFichier(){
		List<Fichier> ancienListeMesFichiers = n1.listerMesFichiers();
		n1.majListeFichier();
		assertTrue(ancienListeMesFichiers.size() == n1.listerMesFichiers().size());
		if(ancienListeMesFichiers.size() == n1.listerMesFichiers().size()){
			for(Fichier f : n1.listerMesFichiers()){
				assertTrue(ancienListeMesFichiers.contains(f));
			}
		}
	}

	public void testListerMesFichiers(){
		assertTrue(n1.listerMesFichiers().size() == 4);
		for(Fichier f : n1.listerMesFichiers()) {
			assertTrue(f.getNom().equals("n1Fic1") ||
					   f.getNom().equals("n1Fic2") ||
					   f.getNom().equals("n1Fic3") ||
					   f.getNom().equals("n1Fic4"));
		}
	}

	public void testListerFichiers(){
		for(File f : n2.listerFichiers(n1)) {
			assertTrue(f.getName().equals("n1Fic1") ||
					   f.getName().equals("n1Fic2") ||
					   f.getName().equals("n1Fic3") ||
					   f.getName().equals("n1Fic4"));
		}
	}
}


